def greet(name):
    """
    这是一个简单的函数，用于打印问候语。
    :param name: 姓名
    :return: 无
    """
    print(f"Hello, {name}!")


print(greet.__doc__)


# 定义位置参数


def add(a, b):
    """
    这是一个简单的函数，用于计算两个数的和。
    :param a: 第一个数
    :param b: 第二个数
    :return: 两个数的和
    """
    return a + b


print(add(1, 2))


# 定义关键字参数函数,这样调用时可以不按照参数定义的顺序
def print_user_info(name, age):
    """
    这是一个简单的函数，用于打印用户信息。
    :param name: 姓名
    :param age: 年龄
    :return: 无
    """
    print(f"姓名：{name}，年龄：{age}")


print_user_info(
    age=18,
    name="张三",
)


# 定义可变参数函数，*args参数,用于接收任意数量的位置参数
def print_args(x, y, z, *args):
    """
    这是一个简单的函数，用于打印任意数量的位置参数。
    :param args: 任意数量的位置参数
    :return: 无
    """
    print(f"x={x},y={y},z={z},args={args}")
    for arg in args:
        print(arg)


print_args(1, 2, 3, 4, 5, 6)


def make_pizza(*toppings):
    print("制作一个披萨，添加以下配料：")
    for topping in toppings:
        print(f"- {topping}")


make_pizza("意大利香肠")
make_pizza("蘑菇", "青椒", "芝士")


# 通过**keyArgs 定义关键字可变参数函数,这样形参会被收集到一个字典中
def print_kwargs(**kwargs):
    print(f"打印关键字参数：,type(kwargs)={type(kwargs)}")
    for key, value in kwargs.items():
        print(f"{key}: {value}")


# 入参是可变关键字参数，参数个数以及顺序都不确定
print_kwargs(name="张三", age=18, sex="男", score=100)


def hybird(a, b, *args, c=1, **kwargs):
    print(f"a={a},b={b},c={c},args={args},kwargs={kwargs}")


hybird(1, 2, 3, 4, 5, x=100, y=200, c=300, d=400, e=500)
# a=1,b=2,c=300, kwargs={'d': 400, 'e': 500} args=(3,4,5)
